package com.example.demo.config;

import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * Created by wangyg6 on 2020/8/5 16:43.
 */

/**
 * @description: swagger2配置文件类
 * @访问路径： 如 http://ip:port/swagger-ui.html#/
 **/
@Configuration
public class SwaggerConfig {

	private String basePackage = "com.example";

	@Bean
	public Docket createRestApi() {
		List<Parameter> pars = new ArrayList<Parameter>();
		ParameterBuilder appId = new ParameterBuilder();

		appId.name("X-APP-ID").description("中国电信分配的X-APP-ID").modelRef(new ModelRef("String")).parameterType("header")
				.defaultValue("ac20d2c707ba41946e5763fde0788cc0").required(true).build(); //header中的ticket参数非必填，传空也可以
		pars.add(appId.build());    //根据每个方法名也知道当前方法在设置什么参数

		ParameterBuilder appKey = new ParameterBuilder();
		appKey.name("X-APP-KEY").description("中国电信分配的X-APP-KEY").modelRef(new ModelRef("String"))
				.parameterType("header").defaultValue("7634d8740d69288f38550c65afa1ed9c").required(true)
				.build(); //header中的ticket参数非必填，传空也可以
		pars.add(appKey.build());    //根据每个方法名也知道当前方法在设置什么参数

		ParameterBuilder requestId = new ParameterBuilder();

		requestId.name("X-CTG-Request-ID").description("中国电信的内部请求ID").modelRef(new ModelRef("String"))
				.parameterType("header").defaultValue(UUID.randomUUID().toString()).required(true)
				.build(); //header中的ticket参数非必填，传空也可以
		pars.add(requestId.build());    //根据每个方法名也知道当前方法在设置什么参数

		ParameterBuilder ProvinceId = new ParameterBuilder();
		ProvinceId.name("X-CTG-Province-ID").description("省级编码").modelRef(new ModelRef("Long")).parameterType("header")
				.defaultValue("8110000").required(true).build(); //header中的ticket参数非必填，传空也可以
		pars.add(ProvinceId.build());    //根据每个方法名也知道当前方法在设置什么参数

		ParameterBuilder lanId = new ParameterBuilder();
		lanId.name("X-CTG-Lan-ID").description("地市级编码").modelRef(new ModelRef("Long")).parameterType("header")
				.defaultValue("8110100").required(true).build(); //header中的ticket参数非必填，传空也可以
		pars.add(lanId.build());    //根据每个方法名也知道当前方法在设置什么参数

		ParameterBuilder staffCode = new ParameterBuilder();
		staffCode.name("Staff-Code").description("员工编号").modelRef(new ModelRef("String")).parameterType("header")
				.defaultValue("Y100919819").required(true).build(); //header中的ticket参数非必填，传空也可以
		pars.add(staffCode.build());    //根据每个方法名也知道当前方法在设置什么参数

		ParameterBuilder channelNbr = new ParameterBuilder();
		channelNbr.name("Channel-Nbr").description("渠道编码").modelRef(new ModelRef("String")).parameterType("header")
				.defaultValue("2318018").required(true).build(); //header中的ticket参数非必填，传空也可以
		pars.add(channelNbr.build());    //根据每个方法名也知道当前方法在设置什么参数

		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("规则中心服务")
				.genericModelSubstitutes(DeferredResult.class).useDefaultResponseMessages(false).forCodeGeneration(true)
				.select().apis(RequestHandlerSelectors.basePackage(basePackage))
				.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(PathSelectors.any())
				.build();
		//.build().globalOperationParameters(pars);
	}

	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("中国电信CRM3.0-规则中心API文档").description("").version("1.0").license("亚信科技")
				.licenseUrl("http://www.asiainfo.com/").build();
	}

}
